#ifndef FORMULATEST_H_INCLUDED
#define FORMULATEST_H_INCLUDED

#include "../formula/formula.h"

//#define NDEBUG
#include <assert.h>
#include <iostream>
#include "../realnumber/realnumber.h"
#include "../realnumber/operations/realdivide.h"
#include "../realnumber/operations/realminus.h"
#include "../realnumber/operations/realmultiplication.h"
#include "../realnumber/operations/realplus.h"
#include "../realnumber/operations/realvariable.h"
#include "../formula/formulafactory.h"
#include "../input/input.h"
#include "../input/inputiterator.h"

class FormulaTest {
    private:
        static bool constructorTest();
        static bool toStringTest();
        static bool evaluationTestRandomFormula();
        static bool evaluationTestConstructedFormula();
        static bool mutateTest();
        static bool deleteAndAddToFormulaTest();
        static bool mutateAddNewElementAtIteratorPositionTest();
        static bool mutateDeleteElementAtIteratorPositionTest();
        static bool mutateElementMutateTest();
        static bool toHumanReadeableStringTest();
    public:
        static bool run();
        // runs all contained tests
};
#endif // FORMULATEST_H_INCLUDED
